package com.jsbs.iam.ident.controller;

import com.github.pagehelper.PageInfo;
import com.jsbs.iam.common.core.dto.Result;
import com.jsbs.iam.common.core.param.AccountInfoDto;
import com.jsbs.iam.common.core.utils.Json;
import com.jsbs.iam.common.core.utils.StringUtils;
import com.jsbs.iam.ident.constant.Constants;
import com.jsbs.iam.ident.param.UserQueryParam;
import com.jsbs.iam.ident.param.UserQueryResp;
import com.jsbs.iam.ident.service.IdentityService;
import com.jsbs.iam.ident.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * @ClassName: UserController
 * @Author: tenghuawei
 * @Date: 2022/12/13 11:17
 * @Description:
 */

@Slf4j
@RestController
@RequestMapping("/iam/ident/user")
public class UserController extends BaseController {

    @Autowired
    UserService userService;

    @Autowired
    IdentityService identityService;

    /**
     * 功能描述：1、用户中心——用户列表分页查询（只展示没有开通过账号的用户）
     * @param userQueryParam
     * @return Result
     */
    @PostMapping("/queryForUser")
    public Result queryForUser(HttpServletRequest request, @RequestBody UserQueryParam userQueryParam) {
        try {
            //当前登录人的所属归属租户
            String companyCode = (String) request.getHeader(Constants.COMPANY_CODE);
            //companyCpde先使用伪数据
//            companyCode="000001";
            if (StringUtils.isBlank(companyCode)) {
                return Result.failWithMsg("当前归属租户状态异常！");
            }
            if(!userQueryParam.getQueryParam().trim().isEmpty() && userQueryParam.getQueryParam().length() > 30) {
                return Result.failWithMsg("用户编码/姓名/手机号长度不可超过30！");
            }
            userQueryParam.setCompanyCode(companyCode);
            log.info("Route=>UserController method=>queryUserInfo 查询用户中心中尚未开通账号，条件入参为：{} ", Json.toJsonString(userQueryParam));
            PageInfo<UserQueryResp> queryForUser = userService.queryForUser(userQueryParam);
            return Result.success("用户中心中未开通账户的用户信息查询成功！",queryForUser);
        }catch (Exception e) {
            log.error("Route=>UserController method=>queryUserInfo 查询用户中心中尚未开通账号异常：{}，入参为：{}", e, Json.toJsonString(userQueryParam));
            return handleException(e,e.getMessage());
        }
    }

    /**
     * 功能描述：2、根据用户id（usercode）,开通账号
     * @param accountInfoDto
     * @return Result
     */
    @PostMapping("/openAccount")
    public Result openAccount(HttpServletRequest request,@RequestBody List<AccountInfoDto> accountInfoDto) {
        try {
            //当前登录人的所属归属租户
            String companyCode = (String) request.getHeader(Constants.COMPANY_CODE);
            //companyCpde先使用伪数据
//            companyCode="000001";
            if (StringUtils.isBlank(companyCode)) {
                return Result.failWithMsg("当前归属租户状态异常！");
            }
        if(CollectionUtils.isEmpty(accountInfoDto)){
            log.info("Route=>UserController method=>openAccount:  accountInfoDto为null");
            return Result.failWithMsg("请至少勾选一条用户信息进行账户开通！");
        }
        log.info("Route=>UserController method=>openAccount 开通账号入参：{}",Json.toJsonString(accountInfoDto));
        boolean openAccount = userService.openAccount(accountInfoDto);
        if(openAccount){
            return Result.successWithMsg("用户开通账户成功！");
        }
        return Result.fail("用户开通账户失败！");
        }catch (Exception e) {
            log.error("Route=>UserController method=>openAccount 开通账号异常：{}，入参为：{}", e, Json.toJsonString(accountInfoDto));
            return handleException(e,e.getMessage());
        }
    }

}
